﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CI.Caja.BE;
using System.Data.SqlClient;

namespace CI.Caja.DL
{
    public class DA_Personal : IDA_Personal
    {
        private CI.Caja.DL.DA_Cargo cargoDAO = new CI.Caja.DL.DA_Cargo();

        public BE_Personal RegistrarPersonal(BE_Personal personal)
        {
            string sentencia = "INSERT CA_PERSONAL (idPersonal, txtNombre, txtApellido, idCargo,numDNI) VALUES (@idPersonal, @txtNombre, @txtApellido, @idCargo,@numDNI)";
            //SqlTransaction transaccion;
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        comando.Parameters.Add(new SqlParameter("@idPersonal", personal.IdPersonal));
                        comando.Parameters.Add(new SqlParameter("@txtNombre", personal.Nombre));
                        comando.Parameters.Add(new SqlParameter("@txtApellido", personal.Apellido));
                        comando.Parameters.Add(new SqlParameter("@idCargo", personal.IdCargo));
                        comando.Parameters.Add(new SqlParameter("@numDNI", personal.NumDNI));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }   
                }

            }
            return ObtenerPersonal(personal.IdPersonal);
            }
        public BE_Personal ActualizarPersonal(BE_Personal personalActualizado)
        {
            //(@idPersonal, @txtNombre, @txtCodigo, @txtApellido, @idCargo)
            string sentencia = "UPDATE CA_PERSONAL SET txtNombre = @txtNombre, txtApellido = @txtApellido, idCargo = @idCargo,numDNI=@numDNI WHERE idPersonal = @idPersonal";
            //SqlTransaction transaccion;
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        comando.Parameters.Add(new SqlParameter("@idPersonal", personalActualizado.IdPersonal));
                        comando.Parameters.Add(new SqlParameter("@txtNombre", personalActualizado.Nombre));
                        comando.Parameters.Add(new SqlParameter("@txtApellido", personalActualizado.Apellido));
                        comando.Parameters.Add(new SqlParameter("@idCargo", personalActualizado.IdCargo));
                        comando.Parameters.Add(new SqlParameter("@numDNI", personalActualizado.NumDNI));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }

            }
            return ObtenerPersonal(personalActualizado.IdPersonal);
        }
        public BE_Personal ObtenerPersonal(string idpersonal)
        {
            BE_Personal persona = null;

            string sentencia = "SELECT idPersonal, txtNombre, txtApellido, idCargo,isnull(numDNI,'') numDNI FROM CA_PERSONAL WHERE idPersonal=@idPersonal";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@idPersonal", idpersonal));

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        persona = new BE_Personal();
                        persona.IdPersonal = (string)resultado["idPersonal"];
                        persona.Nombre = (string)resultado["txtNombre"];
                        //notadebito.Poder = poderDAO.Obtener((int)resultado["poder"]);
                        persona.Apellido = (string)resultado["txtApellido"];
                        persona.IdCargo = (int)resultado["idCargo"];
                        persona.NumDNI = (string)resultado["numDNI"];
                        persona.Cargo = cargoDAO.ObtenerCargo(persona.IdCargo);
                    }
                }
            }
            return persona;
        }
        public ICollection<BE_Personal> ListarPersonal()
        {
            ICollection<BE.BE_Personal> personalExistente = new List<BE.BE_Personal>();
            BE_Personal persona = null;

            string sentencia = "SELECT idPersonal, txtNombre, txtApellido, idCargo,isnull(numDNI,'') numDNI FROM CA_PERSONAL";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        persona = new BE_Personal();
                        persona.IdPersonal = (string)resultado["idPersonal"];
                        persona.Nombre = (string)resultado["txtNombre"];
                        //notadebito.Poder = poderDAO.Obtener((int)resultado["poder"]);
                        persona.Apellido = (string)resultado["txtApellido"];
                        persona.IdCargo = (int)resultado["idCargo"];
                        persona.NumDNI = (string)resultado["numDNI"];
                        persona.Cargo = cargoDAO.ObtenerCargo(persona.IdCargo);
                        personalExistente.Add(persona);
                    }
                }
            }
            return personalExistente;
        }

        public string ObtenerCodigo()
        {
            string codigo = "";
            //string sentencia =  "Select MAX(convertidpersonal)+1 as Codigo from ca_personal";
            string sentencia = "Select MAX(convert(int,isnull(idpersonal,'0')))+1 as Codigo from ca_personal";
            //Select MAX(convert(int,isnull(idpersonal,'0')))+1 as Codigo from ca_personal
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigo = resultado["Codigo"].ToString();
                        
                    }
                }
            }
            return codigo;
        }
        public int ValidaDuplicado(BE_Personal personalActualizado)
        {
            int codigo = 0;
            string sentencia = "Select count(*) as Codigo from CA_PERSONAL where numDNI=@numDNI ";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {

                    comando.Parameters.Add(new SqlParameter("@numDNI", personalActualizado.NumDNI));
                    

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigo = Convert.ToInt32(resultado["Codigo"]);
                    }
                }
            }
            return codigo;
        }
        
    }
}
